package cn.trs.common.utils;

import org.commonmark.node.Heading;
import org.commonmark.node.Node;
import org.commonmark.parser.Parser;
import org.commonmark.renderer.html.HtmlRenderer;

/**
 * @version 1.0
 * @author:TRS
 * @create:2023/4/7 10:12
 * @description:
 * @ClassName: MarkdownUtil
 * @company TRS
 */
public class MarkdownUtil {

    /**
     * 判断是不是markdown格式
     *
     * @param text
     * @return
     */
    public static boolean isMarkdown(String text) {
        Parser parser = Parser.builder().build();
        HtmlRenderer renderer = HtmlRenderer.builder().build();
        String html = renderer.render(parser.parse(text));
        // If the HTML output contains any Markdown-specific tags, then the input was Markdown
        return html.contains("<code") || html.contains("<a") || html.contains("<img") || html.contains("<li") || html.contains("<h");
    }

    /**
     * 提取标题
     *
     * @param text
     * @return
     */
    public static String extractTitle(String text) {
        String result = "";
        Parser parser = Parser.builder().build();
        Node document = parser.parse(text);
        // Find the first heading node in the document
        Node node = document.getFirstChild();
        if (node != null) {
            String tmp;
            if ((tmp = node.getFirstChild().toString()).contains("Text")) {
                result = tmp.replace("Text{literal=", "");
            } else {
                result = node.getFirstChild().toString();
            }
        }
        while (node != null) {
            if (node instanceof Heading) {
                result = node.getFirstChild().toString();
            }
            node = node.getNext();
        }
        // No heading found
        return result;
    }

    public static void main(String[] args) {
        System.out.println(isMarkdown("# Markdown 示例\n" +
                "\n" +
                "## 标题\n" +
                "这是二级标题\n" +
                "\n" +
                "### 有序列表\n" +
                "1. 第一项\n" +
                "2. 第二项\n" +
                "3. 第三项\n" +
                "\n" +
                "### 无序列表\n" +
                "- 第一项\n" +
                "- 第二项\n" +
                "- 第三项\n" +
                "\n" +
                "### 链接\n" +
                "这是一个[链接](https://www.example.com)\n" +
                "\n" +
                "### 图片\n" +
                "![图片](https://www.example.com/image.jpg)\n" +
                "\n" +
                "### 引用\n" +
                "> 这是一段引用的文字。\n" +
                "\n" +
                "### 粗体和斜体\n" +
                "可以使用 **粗体** 和 *斜体* 来强调文字。\n" +
                "\n" +
                "### 代码块\n" +
                "可以使用 \\`code\\` 或者代码块：\n" +
                "\n" +
                "```python\n" +
                "print(\"Hello, world!\")\n" +
                "```\n" +
                "\n" +
                "### 表格\n" +
                "| 名字 | 年龄 | 性别 |\n" +
                "|------|------|------|\n" +
                "| 张三 | 20   | 男   |\n" +
                "| 李四 | 30   | 女   |\n" +
                "\n" +
                "以上就是一个简单的Markdown格式示例。"));
        System.out.println(extractTitle("很抱歉，作为一个语言模型，我无法提供图片。但是你可以在Markdown中插入图片，可以使用以下格式：\n" +
                "\n" +
                "\n" +
                "\n" +
                "```\n" +
                "\n" +
                "![图片描述](图片链接)\n" +
                "\n" +
                "```\n" +
                "\n" +
                "\n" +
                "\n" +
                "例如，如果你有一张小狗的图片，可以使用以下格式插入到Markdown中：\n" +
                "\n" +
                "\n" +
                "\n" +
                "```\n" +
                "\n" +
                "![小狗](https://www.example.com/dog.jpg)\n" +
                "\n" +
                "```\n" +
                "\n" +
                "\n" +
                "\n" +
                "请将上面的链接替换为你自己的图片链接。"));
    }

}
